package chapter1;

/**
 * @author 孙许
 * @date 2018-03-09
 * @description
 * "=="用于匹配内存单元上的内容，其实就是一个数字，计算机内部也就只有数字，而在java语言中，
 * "=="匹配的时候，其实就是对比两个内存单元的内容是否一样。
 *      如果是原始类型byte,boolean,short,char,int,long,float,double就是直接比较它们的值。
 *      如果是引用，比较的就是引用的值，“引用的值”可以被认为是对象的逻辑地址。
 *      如果两个引用发生"=="操作，就是比较相应的两个对象的地址值是否一样。换句话说，如果两个
 *      引用所保持的对象是同一个对象，则返回true,否则返回false(如果引用指向的是null,其实这也是一个
 *      JVM赋予它的某个指定的值）
 *
 *  equals()方法，首先在Object类中被定义的，它的定义就是使用"=="方式来匹配的。如果不去重写equals()方法，
 *  并且对应的类其父类都没有重写过equals()方法，那么默认的equals()操作就是对比对象的地址。
 *  String重写了equals()方法。（两个对象的值是否相同是自己的业务决定的，而不是java语言来决定）
 *
 *  hashCode()
 */
public class Demo1 {
    public static void main(String[] args) {
        String a = "a" + "b" + 1;
        String b = "ab1";
        System.out.println(a == b);
        System.out.println(a.equals(b));

        String a1 = "a";
        final String c1 = "a";
        String b1 = a1 + "b";
        String d1 = c1 + "b";
        String e1 = getA() + "b";
        String compare = "ab";
        System.out.println(b1 == compare);
        System.out.println(d1 == compare);
        System.out.println(e1 == compare);
    }

    private static String getA() {
        return "a";
    }
}
